import unittest
from page.view_goods_page import ViewGoods
import ddt
from common.base import Base
from common.open_browser import open_browser
from common.data_operation import file_path, DataOperation


# todo 首页网址 http://192.168.223.135/ecshop/index.php
# todo 数据准备
# todo 测试用例
# test1_index 测试首页横栏及左侧导航栏是否能点击，点击后是否能自动跳转
# test2_index 测试首页下方1F, 2F, 3F商品及热门商品推荐的商品能否点击，点击后是否成功跳转产品详情页
# test3_index 测试首页左侧导航栏悬停页面1级能否点击，点击后是否能自动跳转页面
# test4_index 测试首页左侧导航栏悬停页面2级能否点击，点击后是否能自动跳转页面

# 数据准备
path = file_path('view_goods.xlsx')
# 首页左侧导航栏鼠标悬停元素定位列表
data_mouseover = DataOperation(path, sheet=2).data_agrument()
# 首页横栏及左侧导航栏元素定位列表
data1_list = DataOperation(path).data_agrument()
# 首页下方及热门商品推荐元素定位列表
data2_list = DataOperation(path, sheet=1).data_agrument()
# 左侧导航栏鼠标悬停页面元素定位列表
data3_list = DataOperation(path, sheet=3).data_agrument()
# 悬停页面下级元素定位列表
data4_list = DataOperation(path, sheet=4).data_agrument()


@ddt.ddt
class ViewGoodsTestCase1(unittest.TestCase):
    driver = open_browser()

    @classmethod
    def setUpClass(cls) -> None:
        # 打开首页
        cls.i = ViewGoods(cls.driver)
        cls.i.get('http://172.16.140.47/ecshop')

    def tearDown(self) -> None:
        # 网页后退
        self.i.back()

    # test1_index 测试首页横栏及左侧导航栏是否能点击，点击后是否能自动跳转
    @ddt.data(*data1_list)
    def test1_index(self, locator):
        # 定位及点击元素并打印该元素文本内容，返回该元素文本内容
        text1 = self.i.index_method1(locator)
        text2 = self.i.get_element_text(('xpath', '//*[@id="ur_here"]/div/div/a[2]'))
        # 断言：text1 = text2，测试通过
        self.assertEqual(text1, text2)
        # print(self.driver.title)

    # test2_index 测试首页下方1F, 2F, 3F商品及热门商品推荐的商品能否点击，点击后是否成功跳转产品详情页
    @ddt.data(*data2_list)
    def test2_index(self, locator):
        # 定位及点击元素并打印该元素文本内容，返回该元素文本内容
        text1 = self.i.index_method1(locator)
        # 定位跳转页面元素并打印该元素文本内容
        text2 = self.i.get_element_text(('xpath', '//*[@id="ECS_FORMBUY"]/div'))
        # 断言：text1 = text2，测试通过
        self.assertEqual(text1, text2)

    # test3_index 测试首页左侧导航栏悬停页面1级能否点击，点击后是否能自动跳转页面
    def test3_index(self):
        # 用下标循环左侧导航栏鼠标悬停元素定位
        for n in range(0, len(data_mouseover)):
            # 循环悬停页面元素定位
            for i in range(0, len(data3_list)):
                if n == i:
                    self.i.mouseover(data_mouseover[n])
                    # 打印悬停页面元素定位的文本及点击该元素
                    text1 = self.i.get_element_text(data3_list[i])
                    self.i.click(data3_list[i])
                    # 打印跳转页面的元素文本
                    text2 = self.i.get_element_text(('xpath', '//*[@id="ur_here"]/div/div/a[3]'))
                    # 断言：text1 = text2，测试通过
                    self.assertEqual(text1, text2)
                    # 页面后退回首页
                    self.i.back()

    # test4_index 测试首页左侧导航栏悬停页面2级能否点击，点击后是否能自动跳转页面
    def test4_index(self):
        # 页面前进到首页
        self.i.forward()
        # 用列表下标循环巡厅页面下级元素定位
        for n in range(0, len(data4_list)):
            self.i.mouseover(('xpath', '//*[@id="category_tree"]/div[1]/div[1]/a'))
            self.i.mouseover(('xpath', '//*[@id="category_tree"]/div[1]/div[2]/div/a'))
            # 打印悬停页面下级元素定位的文本及点击该元素
            text1 = self.i.get_element_text(data4_list[n])
            self.i.click(data4_list[n])
            # 打印跳转页面的元素文本
            text2 = self.i.get_element_text(('xpath', '//*[@id="ur_here"]/div/div/a[4]'))
            # 断言：text1 = text2，测试通过
            self.assertEqual(text1, text2)
            # 页面后退回首页
            self.i.back()

    @classmethod
    def tearDownClass(cls) -> None:
        # 关闭浏览器
        cls.driver.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)
